"""
No hace todo el procesamiento, solo la parte con la que peleamos hoy.

Se ingresa el bloque de referncias, el ref_old y el wn. (wn se toma
constante para todo el procesamiento)
Retorna el bloque de salida, y un nuevo ref_old como para volver a
llamar la funcion
"""


def adapt_with_indices(ref, ref_old, wn):
       """
       ref = bloque de vector de referencias
       ref_old = M-1 ultimos valores del anterior vector de referncia
       wn = coeficientes (no se estan recalculando aca)
       """
       M = len(wn)
       L = M - 1
       B = len(ref)
       out = [0]*B
       for k in xrange(0, B):
               acum = 0
               for n, i in zip(range(M), range(k, k + M)):
                       if i < L:
                               r = ref_old[i]
                       else:
                               r = ref[i-L]
                       acum += r * wn[n]
               out[k] = acum
       return out, ref[-L:]


print adapt_with_indices([1,2,3,4,5,6],[0,0],[1,1,0])

print adapt_with_indices([7,8,9,10,11,12],[5,6],[3,1,9])

